package masterclient;

import Protocol.ClientObject;
import Protocol.ComProtocol;
import Protocol.ReturnObject;
import java.security.MessageDigest;
import java.util.ArrayList;

/**
 * In deze klasse worden de account bewerkingen afgehandeld
 * @author Michael Stevens
 * @since 30-05-2012
 */
public class AccountManagement {
    
    private Masterclient mc;   
    private String[][] data;
    private String[] name;
    
    public AccountManagement(Masterclient mc){
        this.mc = mc;
    }
    
    /**
    * Deze methode haalt alle gebruikers op uit de database en vult een Combolist met de namen
    * @author Michael Stevens
    * @since 30-05-2012
    */
    public void getUsers(){
        ReturnObject ro = mc.getAuth().excecuteSelect("SELECT [User ID], [Name], [Password], [isMaster] FROM [User] WHERE [Name] != \'system\'");
            if(ro.getMessage().equals("ok")){
                mc.getGUI().createCombolistAccount(verwerkReturnObject(ro));
            }
    }
    
    /**
    * Deze methode handelt het aanmaken van een gebruiker af
    * @author Michael Stevens
    * @since 30-05-2012
    */
    public void createUser(String name, String pass, int isM){
        ReturnObject ro = mc.getAuth().excecuteUpdate("INSERT INTO [User]([Name], [Password], [isMaster]) VALUES" 
                        + " (\'" + name + "\', \'" + pass + "\', " + isM + ")");
            if(ro.getMessage().equals("ok")){
                mc.getGUI().resetComboListAccount();
                getUsers();
            }
    }
    
    /**
    * Deze methode handelt het wijzigen van een gebruiker af
    * @author Michael Stevens
    * @since 30-05-2012
    */
    public void updateUser(int index, String name, String pass, int isM){
        ReturnObject ro = mc.getAuth().excecuteUpdate("UPDATE [User] SET [Name] = \'" 
                    + name + "\', [Password] = \'" + pass + "\', [isMaster] = " + isM + " WHERE [User ID] = " + data[index][0].toString());
            if(ro.getMessage().equals("ok")){
                mc.getGUI().resetComboListAccount();
                getUsers();
            }
    }
    
    /**
    * Deze methode handelt het verwijderen van een gebruiker af
    * @author Michael Stevens
    * @since 30-05-2012
    */
    public void deleteUser(int i){         
            ReturnObject ro = mc.getAuth().excecuteUpdate("DELETE FROM [User] WHERE [User ID] = " + data[i][0].toString());
            if(ro.getMessage().equals("ok")){
                mc.getGUI().resetComboListAccount();
                getUsers();
            }
    }
    
    /**
    * Hier wordt het binnenkomende returnobject uitgelezen en worden de 
    * waarden in arrays gezet.
    * @return de array string met naam
    * @author Michael Stevens
    * @since 30-05-2012
    */
    public String[] verwerkReturnObject(ReturnObject ro){       
        int counter = 0;
        
        name = new String[ro.getRijen().size()];
        
        data = new String[ro.getRijen().size()][ro.getKolommen().size()];
        
        for(ArrayList a:ro.getRijen()){
            int ic = 0;
            name[counter] = a.get(1).toString();
            for(Object o: a){
                data[counter][ic] = o.toString();
                ic++;
            }                       
            counter++;
        }
        return getName();
    } 
    
    /**
     * @return the data
     */
    public String[][] getData() {
        return data;
    }

    /**
     * @return the name
     */
    public String[] getName() {
        return name;
    }
}
